package com.example.java.base.reflect;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;


/**
 * Person:用于反射的一个测试类
 *
 * @author zhangxiaoxiang
 * @date 2020/11/3
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Person implements MyInterface, MyInterface2 {
    /**
     * id
     */
    private int id;
    /**
     * 名称
     */
    protected String name;
    /**
     * 年龄
     */
    private Integer age;
    /**
     * 描述
     */
    public String desc;


    @Override
    public void interfaceMethod() {
        System.out.println("我是实现接口的公共方法1");
    }

    @Override
    public void interface2Method() {
        System.out.println("我是实现接口的公共方法2");

    }

    protected String protectedMethodTest() {
        System.out.println("我是本包方法哈......");
        return "我是本包方法哈";
    }

    protected String protectedMethodTest(String s) {
        System.out.println("我是(带参)本包方法哈,参数是===>" + s);
        return "我是(带参)本包方法哈:  " + s;
    }

    private String privateMethodTest() {
        System.out.println("我是私有方法哈......");
        return "我是私有方法哈";
    }

    private String privateMethodTest(String s) {
        System.out.println("我是(带参)私有方法哈,参数是===>" + s);
        return "我是(带参)私有方法哈:  " + s;
    }

    /**
     * 测试反射获取构造方法 int.class和 Integer.class不一样
     * @param id
     */
    public Person(int id) {
        this.id = id;
    }
    /**
     * 测试反射获取构造方法 String.class不一样
     * @param name
     */
    public Person(String name) {
        this.name = name;
    }

    public Person(Integer age) {
        this.age = age;
    }
}
